//package com.allwees.bs.c.module.product.controller;
//
//import com.google.common.collect.Lists;
//import com.allwees.bs.c.module.base.controller.BaseController;
//import com.allwees.bs.c.module.product.VoConvertor;
//import com.allwees.bs.c.module.product.dto.ProductReviewDTO;
//import com.allwees.bs.c.module.product.service.ProductService;
//import com.allwees.bs.c.module.security.AnonymousAccess;
//import com.allwees.bs.core.model.ops.annotation.InsertAds;
//import com.allwees.bs.core.model.product.annotation.FetchInventory;
//import com.allwees.bs.core.modelbase.constant.ErrorMessage;
//import com.allwees.bs.core.modelbase.page.PageParams;
//import com.allwees.bs.core.modelbase.page.PaginateDTO;
//import com.allwees.bs.core.modelbase.vo.R;
//import com.allwees.search.support.ProductClientService;
//import com.allwees.search.vo.ProductFeignSearchVO;
//import com.allwees.support.api.compatible.ApiVersion;
//import com.allwees.support.marketing.aop.ResetPrice;
//import com.allwees.support.marketing.service.HotWordService;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.util.CollectionUtils;
//import org.springframework.validation.annotation.Validated;
//import org.springframework.web.bind.annotation.*;
//
//import javax.validation.constraints.NotBlank;
//import javax.validation.constraints.NotNull;
//import java.util.List;
//
//import static com.allwees.bs.core.modelbase.constant.ResultEnum.NOT_FOUND;
//
///**
// * 商品相关
// */
//@Slf4j
//@Validated
//@RestController
//@RequestMapping("/api/v1/product")
//public class ProductController extends BaseController implements VoConvertor {
//
//    @Autowired
//    private ProductService productService;
//
//    @Autowired
//    private HotWordService hotWordService;
//
//    @Autowired
//    private ProductClientService productClientService;
//
//    @GetMapping("/hws")
//    public R hotWords() {
//        return R.ok(hotWordService.first15());
//    }
//
//    /**
//     * 商品列表 - 关键词模糊搜索
//     *
//     * @param keyword
//     * @param pageParams
//     * @return
//     * @see ProductClientService
//     * @see com.allwees.search.support.ProductServiceFeign
//     * @since 2020-12-04 更新数据获取 from 商品服务, 去掉调价注解, 商品服务提供的数据已做过调价处理
//     */
////	@ResetPrice
//    @GetMapping("/search")
//    @AnonymousAccess
//    public R search(@RequestParam(value = "q") String keyword, PageParams pageParams) {
//        PaginateDTO<ProductFeignSearchVO> paginateDTO = productClientService.search(keyword, pageParams);
//        setUserRelated(paginateDTO);
//        return R.ok(paginateDTO);
//    }
//
//    /**
//     * 商品列表 - 指定类目
//     *
//     * @param categoryNo
//     * @param pageParams
//     * @return
//     * @see ProductClientService
//     * @see com.allwees.search.support.ProductServiceFeign
//     * @since 2020-12-04 更新数据获取 from 商品服务, 去掉调价注解, 商品服务提供的数据已做过调价处理
//     */
////	@ResetPrice
//    @GetMapping("/{categoryNo}")
//    @AnonymousAccess
//    public R productsByCategory(@PathVariable("categoryNo") String categoryNo, PageParams pageParams) {
//        return findList(categoryNo, pageParams);
//    }
//
//    /**
//     * 商品列表 - 指定类目 2.0.0
//     *
//     * @param categoryNo
//     * @param pageParams
//     * @return
//     * @see ProductClientService
//     * @see com.allwees.search.support.ProductServiceFeign
//     * @since 2020-12-04 更新数据获取 from 商品服务, 去掉调价注解, 商品服务提供的数据已做过调价处理
//     */
//    @ApiVersion("2.0.0")
//    @InsertAds
////	@ResetPrice
//    @GetMapping("/{categoryNo}")
//    @AnonymousAccess
//    public R productByCategoryV2(@PathVariable("categoryNo") String categoryNo, PageParams pageParams) {
//        return findList(categoryNo, pageParams);
//    }
//
//    private R findList(String categoryNo, PageParams pageParams) {
//        // 数据获取 from 商品服务
//        PaginateDTO<ProductFeignSearchVO> paginateDTO = productClientService.searchByCategory(categoryNo, pageParams);
//        setUserRelated(paginateDTO);
//        return R.ok(paginateDTO);
//    }
//
//    /**
//     * 获取单个商品详情，只包括商品的基础信息，不包括可能出现无限多情况的数据，如评论列表，拼团列表等
//     *
//     * @param productUuid
//     * @return
//     * @see ProductClientService
//     * @see com.allwees.search.support.ProductServiceFeign
//     * @since 2020-12-04 更新数据获取 from 商品服务, 去掉调价注解, 商品服务提供的数据已做过调价处理
//     */
//    @FetchInventory
////	@ResetPrice
//    @AnonymousAccess
//    @GetMapping("/info/{productUuid}")
//    public R getProduct(@NotBlank @PathVariable("productUuid") String productUuid) {
//        ProductFeignSearchVO productFeignSearchVO = productClientService.searchProductInfo(productUuid);
//        if (productFeignSearchVO != null) {
//            ProductFeignSearchVO product = setUserRelated(productFeignSearchVO);
//            return R.ok(product);
//        } else {
//            return R.error(NOT_FOUND.getLeft(), NOT_FOUND.getRight());
//        }
//    }
//
//    /**
//     * 商品关联数据
//     *
//     * @param productUuid
//     * @param count
//     * @return
//     * @see ProductClientService
//     * @see com.allwees.search.support.ProductServiceFeign
//     * @since 2020-12-04 更新数据获取 from 商品服务, 去掉调价注解, 商品服务提供的数据已做过调价处理
//     */
////	@ResetPrice
//    @GetMapping("/related/{productUuid}")
//    @AnonymousAccess
//    public R getRelatedProducts(@NotBlank @PathVariable("productUuid") String productUuid,
//                                @RequestParam(name = "count", defaultValue = "10") Integer count) {
//        count = Math.min(count, 20);
//        List<ProductFeignSearchVO> products = productClientService.related(productUuid, count);
//        products = productService.collectedOrBought(products, getUserUuid());
//        return R.ok(products);
//    }
//
//    /**
//     * 单个商品评价列表
//     *
//     * @param productUuid
//     * @param current
//     * @return
//     */
//    @GetMapping("/review/{productUuid}")
//    public R getProductReviewList(
//            @NotNull(message = "productUuid " + ErrorMessage.PARAM_NOT_NULL) @PathVariable("productUuid") String productUuid,
//            @RequestParam(defaultValue = "1") Integer current) {
//        current = Math.max(current, 1);
//        ProductReviewDTO productReview = productService.getProductReviews(productUuid, current);
//        return R.ok(productReview);
//    }
//
//    /**
//     * 热销商品列表
//     *
//     * @param keyCode
//     * @return
//     */
//    @Deprecated
//    @ResetPrice
//    @GetMapping("/hot_sell/{keyCode}")
//    public R getPageHotSellProducts(@PathVariable("keyCode") String keyCode, PageParams pageParams) {
//        //return getCategoryProducts(keyCode, pageParams);
//        log.info("===> call from unknown place...");
//        return R.ok();
//    }
//
//    private void setUserRelated(PaginateDTO<ProductFeignSearchVO> page) {
//        if (CollectionUtils.isEmpty(page.getResults())) {
//            return;
//        }
//        page.setResults(productService.collectedOrBought(page.getResults(), getUserUuid()));
//    }
//
//    private ProductFeignSearchVO setUserRelated(ProductFeignSearchVO vo) {
//        List<ProductFeignSearchVO> vos = productService.collectedOrBought(Lists.newArrayList(vo), getUserUuid());
//        return CollectionUtils.isEmpty(vos) ? null : vo;
//    }
//}
